package com.weishi.project.training.service;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import com.weishi.framework.web.domain.AjaxResult;
import com.weishi.project.api.vo.ChannelAchievementVo;
import com.weishi.project.sport.movement.vo.TrainingVO;
import com.weishi.project.training.domain.TrainingGroupChannel;

import java.util.List;
import java.util.Map;

/**
 * 训练小组航道Service接口
 */
public interface ITrainingGroupChannelService extends IService<TrainingGroupChannel> {

    /**
     * 查询训练小组航道列表
     */
    List<TrainingGroupChannel> selectTrainingGroupChannelList(TrainingGroupChannel trainingGroupChannel);

    TrainingGroupChannel getTrainingGroupChannelDetails(int id);

    void updateTrainingGroupChannelById(TrainingGroupChannel trainingGroupChannel);

    /**
     * 获取航道名称集合
     * @return List<TrainingGroupChannel>
     */
    List<TrainingGroupChannel> getChannelNameList();

    int getChannelIdByGroupIdAndChannelNameAndBatch(Map<String,Object> map);

    /**
     * 根据周id和dayId查询所有航道id
     * @param map
     * @return
     */
    List<TrainingGroupChannel> getTrainingGroupChannelByWeekIdAndTrainingDayId(Map<String,Object> map);

    /**
     * 根据小组id查询详情
     * @param groupId
     * @param sportmanNameFlag 是否获取运动员姓名
     * @return
     */
    List<TrainingGroupChannel> getTrainingGroupChannelByGroupId(int groupId,boolean sportmanNameFlag);
    List<TrainingGroupChannel> getTrainingGroupChannelAndAchievementByGroupId(int groupId);

    /**
     * 更新小组航道其他信息(id)service 待定
     * @param trainingGroupChannel
     */
    void updateTrainingGroupChannelList(TrainingGroupChannel trainingGroupChannel);

    /**
     * 查询成绩是否存在 存在 返回true 不存在返回false
     * @param map
     * @return
     */
    boolean selectAchievementIsNull(Map<String,Object> map);

    /**
     * 查询航道成绩排名
     * @param map
     * @return
     */
    List<ChannelAchievementVo> queryChannelAchievement(Map<String,Object> map);

    /**
     *
     * @param params
     * @param setPerson 是否需要航道内人员成绩
     * @return
     */
    List<TrainingGroupChannel> qryBestTop10(Map<String, Object> params,boolean setPerson);

    /**
     * 获取训练小组航道+运动员成绩详细信息
     * @param channelId
     * @return
     */
    TrainingGroupChannel getTrainingGroupChannelAndAchievement(Integer channelId);

    boolean add(TrainingGroupChannel trainingGroupChannel);

    boolean removeByIds(List<Integer> idList);
    boolean removeById(Integer channelId);


    /**
     * PC 端 -- 查询航道水上陆上分段数据
     */
    AjaxResult getSubsection(JSONObject jsonObject);


    /**
     * PC 端 -- 删除水上或者陆上分段数据
     */
    void deleteSubsection(JSONObject jsonObject);


    /**
     * PC 端 -- 清空航道下关联的数据，以及航道数据
     */
    void emptyChannel(JSONObject jsonObject);

    /**
     * 获取航道状态 0、未训练 1、训练中 2、训练结束
     * @param channelId
     * @return
     */
    int getChannelStatus(Integer channelId);

    /**
     * 获取航道状态 0、未训练 1、训练中 2、训练结束
     * @param channelId
     * @return
     */
    int setChannelStatus(Integer channelId,Integer status);


    /**
     * 根据 小组id 和用户 id 查询有没有在训练
     */
    List<TrainingVO> getOneTrainingVO(Integer groupId , Integer userId);



}